import { Component } from "vue"

export type Filter<T = any> = {
  /** 定义过滤器显示的标签 */
  label: string
  /** 定义参数的属性名 */
  prop: string
  /** 设置过滤器在网格布局中所占的空间 */
  span?: number
  /** 定义过滤器提示使用的占位符 */
  placeholder?: string
  /** 设置过滤器是否隐藏 */
  hidden?: boolean
  /** 设置过滤器禁用状态 */
  disabled?: boolean
} & T

// 用于渲染过滤器
export type Renderer<T = any> = {
  supports: (filter: Filter<T>) => boolean
  component: Component
}

// 用于传递给过滤器渲染器
export type FilterRendererProps<T = any> = {
  filter: Filter<T>
  params: any
  filters: Filter<any>[]
  value: any
  onChange: (value: any) => void
}
